﻿namespace Sgr.Licence.Services
{
    /// <summary>
    /// 应用程序许可证管理接口
    /// 用于管理软件的许可证状态、激活和验证过程
    /// </summary>
    public interface IAppLicenseManage
    {
        /// <summary>
        /// 获取当前许可证状态
        /// </summary>
        /// <remarks>
        /// 状态包括：未激活、有效、即将到期、已过期、无效等
        /// 可用于在UI界面展示相应的授权状态信息
        /// </remarks>
        LicenseStatus CurrentStatus { get; }

        /// <summary>
        /// 获取注册码
        /// </summary>
        /// <remarks>
        /// 基于计算机硬件信息（计算机名称和网卡地址）生成唯一的注册码
        /// 生成的注册码格式为：XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
        /// </remarks>
        /// <returns>25位注册码，分5组，每组5个字符</returns>
        string GetRegistrationCode();

        /// <summary>
        /// 执行注册操作
        /// </summary>
        /// <param name="registrationCode">注册码，通过GetRegistrationCode获取</param>
        /// <param name="activationCode">激活码，从授权方获取</param>
        /// <param name="message">输出消息，包含注册成功或失败的详细信息</param>
        /// <returns>注册是否成功</returns>
        /// <remarks>
        /// 将注册码和激活码进行匹配验证，验证通过后保存激活信息
        /// 如果验证失败，message参数会包含失败原因
        /// </remarks>
        bool Register(string registrationCode, string activationCode, out string message);

        /// <summary>
        /// 验证当前软件授权状态
        /// </summary>
        /// <param name="message">输出消息，包含授权状态的详细信息（如：即将到期提醒）</param>
        /// <returns>授权是否有效</returns>
        /// <remarks>
        /// 此方法检查多方面因素：
        /// 1. 软件是否已激活
        /// 2. 许可证是否在有效期内
        /// 3. 是否存在时间篡改
        /// 4. 距离到期还有多少天（接近到期时会返回警告信息）
        ///
        /// 根据检查结果更新CurrentStatus属性
        /// </remarks>
        bool ValidateLicense(out string message);
    }
}